2019 总结 | hucheng - 漫漫技术路从外企到互联网

January 03, 2020

最近看了很多的人写的年终总结,好佩服大家的自律,居然做了那么多事,再反观自己这条咸鱼咋啥子都没有干,自惭形秽,(后来我一想,社区里能推荐看到的,肯定是那些积极向上的同学呀,不然怎么传播),估计大部分人和我一样,立的 flag 大部分是没有实现的,由于35岁危机,裁员的原因,脉脉上最近很流行 互联网考公务员,进国企,外企,搞笑的是前2年脉脉上是,你怎么还不转互联网,别问,问就是转开发,互联网最香。我自己刚好是从外企跳槽到互联网的,我就来讲讲我自己这1年的来的经历感受

个人经历

  • 2015.06 ~ 2017.05 小公司 Java web开发
  • 2017.05  ~ 2018.09 上汽通用 前端开发
  • 2018.09 ~ now 趣头条 前端开发

背景

我是2017年5月进的「上汽通用」 ,2018年9月从上汽通用离职,跳槽到趣头条, 上汽通用是上汽和美国通用合营的合资企业,保留着一些外企文化,有 雪弗兰,别克,凯迪拉克3个品牌,在车企里面排在前面,「趣头条」 是一个 典型的互联网公司,先比较下 2 家公司的工作氛围

通用

技术之路

我进通用也是段很有意思的经历,我的同事们学历都超级厉害,大部分来自同济,交大,上大,东华,而且有很多都是研究生,我自己的话是个野鸡二本院校,按照官网投简历的话肯定是进不去的,那我咋进通用的勒?

我15年来上海的时候,被猎头推荐到 通用去干外包,然后把我后来通用的老大的微信发我让我加下,说会给我发些面试题,考考我,然后就加了,结果微信加了后,也没发啥子面试题,我也没去通用干外包,就这样成为了微信好友,躺在好友列表里,17年我跳槽的时候,抱着碰碰运气的想法,给老大发了我的简历,那会我自己在网上写了30来篇JavaScript 学习笔记,老大看了后觉得我思路还比较清晰,也是个对技术有热情的人,刚好他们也正好缺个前端,就约我在个咖啡馆见面,聊了下(额,去咖啡馆,我点了杯茉莉花茶,😄匿),就这样我就进了通用,所以我是很感谢我的老大的,让我去了个大平台

  • 插一句哈,平常主动多加微信是有好处的,在大会,微信公众号看到人家留了微信,我都会主动加(这次「早早聊」几个大佬演讲的时候就留微信二维码,赶紧扫了一波),多输出文章也是有好处的,人家弄从文章里看你这个人的思路(所以要把握好 why how what 的顺序)
  • 在通用的话,当时整个公司用的还是 Jquery,基本都是 Java 后端来写前端,因为美国通用用的是 Angular 和都是 Java 开发,Angular 基于 TS的语法 对于 Java 开发者来说上手太容易了,我们就推行了 Angular 来构建公司通用的前端脚手架,事实上大家上手也确实非常快,当时除了上海,烟台,武汉的研发都开始用 Angular 来开发了,不过意外的是,后面 Angular 在国内社区没咋发展,导致社区开源组件少,会用的人也少,就导致开发太难招了

实在话,我自己特别喜欢 Angular,开发配置什么都搞好,不用管啥子 webpack,babel,基于TS 注解那套对代码把控很好,nest.js 也是往这个方向走,一个牛逼的前端和一个Java web 写出来,代码差别不是太大,代码质量能很好的控制,现在 Vue,React 工程化方面都有和 Angular 靠拢

我负责 Angular 脚手架维护和推广,和解决各种大家遇到的前端问题,根据大家遇到的问题,再调整脚手架,我最大的感受就是,这种通用的脚手架不能过于追求完美,更应该考虑一个小白拿到脚手架就能干活,不要有完美主义,代码 low 点不要紧,重要的是好理解,上手简单

当时我们主要开发 2B 端后台管理应用,客户都是 4s 店的人员,B端有2大难,表格和表单,真的是非常复杂,之前我老吐槽我们的 PM 咋把页面设计成这个样,随着深入我慢慢理解了他们,不那样做是真的没有更好的办法,后来我再也不吐槽了,现在我在没有十分确定的情况下,不会去吐槽别人的代码写的垃圾,方案设计垃圾,很可能 在当时那个场景,他有自己的考虑,有自己的妥协,不要随便喷方案,可能自己来还没别人做的好,也不要随便提意见建议,假设提了,就要给出对应能落地能解决的方案,绝不做喷子

从我自己的观察来看,传统型的公司其实有很多事情可以做,工程化是相当的不完善,大有可为,难点就是推动起来很难,阻碍多

那我为啥要从通用离职,最大的原因是自己缺钱,通用虽然在技术上有成长,但工资涨不起来,还有一个原因是,公司专职的前端就我一个,视野打不开,所以我就离职了

工作感受

类似通用这样的外企或者传统企业工作和生活是分的开的,沟通主要靠邮件,公司里沟通里是微软的 Skype,下班关电脑了,就没人来打扰了,不想企微/钉钉,工作生活完全分不开,大晚上还有人艾特你,除非实在事情是特别紧急,才会有人打电话给你

真正的弹性工作制,打卡满足8小时就可以下班,很多同事要下班接孩子,早上 8 点多钟就来了,下午5点多就下班回家了,还不用看看同事是不是都还没走,走的心里坦荡,理直气壮,超过 8 小时就算加班,加班按法定的加班工资算,一般领导为了控制加班支出,都尽量不让大家加班,相比之下 互联网所谓的 不打卡的弹性工作制就是个笑话了。

因为人员流动性下,高级职位也比较少,萝卜坑就那么多,得慢慢熬

办公空间比较大,特别是泛亚办公楼,楼层高度都比较高,空气流动性好,我看大部分互联网公司办公室都像大作坊,一通排的的坐,人太多,密度过大,空气质量是相当的差,以前是没发现这个邮电,后来觉得这个是真香,空气好,脑壳不晕,工作效率贼高

上下班有班车接送,上海各个区早上,晚上都有班车 ,比较方便

趣头条

技术流水帐

我是 18 年 9 月入职的,在中台这边,目前公司各个 BU 前端加起来有 100+ 多人,也是我自己第一次见到这么多前端还是很兴奋的,中台主要是为各个业务线 BU 提供技术服务的,简单说就是把通用的业务模型抽象提炼出来,做成模块化的,或者提出通用的解决方案,或者是做一些基础设施建设,这里技术栈主要是 Vue.js,从 Angular 切到 Vue,是无缝切,很好上手,做了些 npm 工程化,gitlab ci ,组件库,错误上报

我接手的第一个任务是 想办法 把 gitlab 上 npm group 下面的就60多个 组件的 README.md 文档同步到一个地方,大家都能看到,然后,我调查了 gitlab ci, webhook,conflunece api(公司用的 wiki是 confluence),然后 在 npm 这个 group 所有仓库默认添加了 一个 webhook ,在 master 分支 push 的时候会调用 我用 node 写的接口,在接口里通过调用 gitlab 的 api 获取到 README.md ,然后调用 confluence 的 api, 统一放到同一个目录下面,这样文档就能实时更新了,后面 借助 gitlab ci ,完成了 自动 publish 到公司的私有仓库 Nexus,这样真个 npm 的流程比较工程化了,再后来,一个同事写了个组件展示平台,左边文档右边 demo,清晰明了,整个 npm 组件 流程就非常的工程化,非常方便大家共享

接着业务BU的同事反映,线上js错误查起来比较麻烦,又牵头做了错误上报,错误 sourcemap还原的项目,非常方便大家排查问题

在接着写一个 基于 Node.js + MongoDB + Vue.js 的内部资源平台,自己写过2年多的 Java ,写这些还是比较容易的,PV 在 2000 左右

然后还负责了基于Vue.js 的前端组件库,现在有了20多个组件,很多也已经用在业务线上了,网上 Vue 组件库很多,把他们的代码都拉了下来,仔细研究了每个组件库的架构设计,学到了很多东西,组件实现其实没什么难度,更多是一种取舍,又要方便开发者,同时为了UED的设计规范,需要去限制开发者,需要找到一个平衡

最近的话,在搞 RN 的热更新,面向 C端 的接口,一天的PV在几百万,这个对技术要求高些,所以需要处理 Redis缓存,数据库 sql 优化,也还挺有意思的

参与公司的活动页可视化搭建项目,这个项目非常有意思,也比较复杂,同事主导设计的,我也参与了开发,实在话,我自己一个人来设计整个项目的话,我自己是拿不下来的,所以自己把整个项目设计,代码都梳理了一遍,弄懂了

对外输出

有段时间还组织过各个Bu的同事做分享,做了几次没有坚持下来,想想在大群里吹的牛皮,组织大家参与分享,就觉得脸红

年前我组织了一个 刷 FrontMaster 微信小群,2个月后,结果也没坚持刷

年前打算 一个星期写一篇文章,通过输出,倒逼自己学习,也没坚持下来,只输出了

公众号「chromedev」一年来才 100个人关注了,少的可怜

工作感受

互联网公司典型的加班多,刚开始来我还有些不适应,哪天6点下班都觉得很稀奇,工作和生活拆不开,企微白天到黑夜响个不停,现在也已经习惯了,高强度工作,工资也比通用高很多,有舍有得

年轻人特别多,在通用那会,我都算年轻的,趣头条这里,96,97都有好多了,深深加重了焦虑感

一点技术感想

因为处理 npm 相关的问题,所以有了大部分前端项目的权限,看了好多项目的代码,脚手架ci,多页模版构建,gitalb ci 结合 cdn 部署发布,制品仓的概念,pageloader 曲线报警,非SSR的渲染,大大扩展了知识面。

加深了 对 「前端工程化」的理解,「前端工程化」绝对不是网上课程里面说的 Webpack 配置,我觉得这个太小,这个只能算工具化,一般听到工程最多的是 建筑行业的,项目工程,从这个层面理解,工程化是包含最开始 项目立项,需求,预算,搭地基,建房子的规范,工程质量控制,多人协作,盖好后验收,等等,对应到软件,就是从项目立项,开发,持续集成,质量控制,多人协作规范,上线后错误监控,性能监控,离线化,热更新,报警机制,等等,有非常多的内容,我自己感觉前端发展的短短 十几年,工程化这块还有很多东西没有完成,也没有成型的开源方案,搞这些很多都和后端知识有关系,这些东西 纯后端开发不了解业务是很难做好的,一定是前端工程师来主导完成的,而 Node.js 就是去完成这些基石,所以说 前端工程师的竞争力在 「跨端跨栈」还是很有道理的

写在后面

外企和互联网各有各的好,想清楚自己的诉求(比如我,农村出来,要留在大城市,肯定是选择经济回报更好的),都可以的,适合自己的就是最好的

新年flag

  • 技术在 「跨端跨栈」,「前端工程化」2个大的方向发力
  • 养成 把目标拆分,一个节点一个节点推进,然后复盘的习惯